只用几个命令即可编译各个版本的内核,且qemu适配运行,此外新加CVE环境编译建立功能。但是这个主要还是依赖我复现的CVE,暂时只有
CVE-2021-22555
并且可能不同的编译环境编译出来的相关gadget地址,或者cred结构体地址不太一样,所以在里面的exp的相关gadget地址什么的还是需要设置一下的。
git clone https://github.com/PIG-007/kernelAll.git
#git clone https://gitee.com/Piggy007/kernelAll.git
cd kernelAll
chmod a+x setup.sh
sudo ./setup.shkernelAll_compileKernel -v 4.4.72这里就代表编译内核为4.4.72版本的。
完成之后在~/kernelAll/kernelSource下可以找到对应版本的内核源码,这个用来编译模块,或者在调试的时候可以用gdb的dir功能来直接调试源码
之后会将bzImage和vmlinux以及项目根目录下的rootfs.cpio放到kernelPwn的对应版本文件夹中
之后启动内核就是依据当前文件夹下对应版本的内核文件了
由于更新成了py文件,使用python3,pip安装一下对应包即可
当然还可以对内核添加配置
更加方便调试,编译内核时加入-debug
添加一些配置,比如CONFIG_SLAB_FREELIST_RANDOM=y,CONFIG_SLAB_FREELIST_HARDENED=n,另外加上*可以进行所有项匹配。
比如:
-c CONFIG_SLAB_FREELIST_RANDOM=y CONFIG_SLAB_FREELIST_HARDENED=n CONFIG_NETFILTER_XT_*=y
把驱动模块的源代码放到path/kernelAll/modFile/中,然后
kernelAll_compileModule kmod.c 4.4.72
这里就代表用刚才的编译好的4.4.72版本的内核源码来编译kmod.c,编译完成之后自动将kmod.ko放到rootfs文件系统中,并且重新打包。
kernelAll_pocCopy poc 4.4.72这个即代表将poc文件放入对应版本4.4.72的rootfs文件系统中,然后重新打包。
kernelAll_boot 4.4.72这个即代表依据对应/path/kernelPwn/对应版本的内核文件,使用qemu-system-x86_64启动刚刚编译好的4.4.72内核。
由于做pwn题时肯定需要附加调试,所以也提供了调试功能
bootPwnKernel 4.4.72 -g 1234即以1234端口为调试端口,可供gdb附加调试。
现在相关的CMD设置成软链接模式放入到/usr/bin/中,所以直接修改path/kernelAll/CMD/对应的CMD命令文件即可
详见
~/kernelAll/kernelTool/pigKernelHeap.py
~/kernelAll/kernelTool/pigKernelHeap_debug.py
任选其一即可,如果使用本工具编译的带debug信息时,那么使用pigKernelHeap_debug.py即可,如果不带debug信息时,需要用vmlinux-to-elf来获取带符号的vmlinux才行,然后还需要指定在kmem_cache结构体中的random值的偏移slab_random_offset,因为不同编译设置情况下都不一样的,这个最好查一下,或者实际调一下,如果不指定,则默认为0xb8。
在gdb中直接source引用即可。
pigSlub help即传递一下相关配置,由于在kernel的Slub堆中,有harden、random等保护,但是不同版本中有swab计算,或者FD位置为chunk_addr+size/2,所以需要传递一下相关配置进行计算。比如这里就开启了harden保护,且版本在v5.9,那么就存在FD偏移和swab计算的情况。
pigSlub init freelist_harden freelist_harden_swab freelist_size2
pigSlub cpu0
pigSlub kmalloc-32
pigSlub all具体自己实验一下吧
相对于的pigSlab命令也是类似的。
ubuntu20.04的时候,依照setup.sh中安装qemu已经不太行了,需要自己手动安装对应版本的包,这里就需要安装如下的包,之后运行bootPwnKernel相关命令即可启动:
apt-get install qemu-system-x86本人水平比较菜,如有错误或者bug,请师傅们多担待,欢迎提出相关意见。






